#include <cstdlib>  // 包含标准库头文件，提供EXIT_SUCCESS等宏
#include <iostream> // 包含输入输出流头文件
#include <string>   // 包含字符串处理头文件

// 定义宏，用于将宏参数转换为字符串
#define STRINGIFY(x) #x
#define TOSTRING(x) STRINGIFY(x)

// 定义一个返回架构信息的函数
std::string say_hello() {
  // 获取架构信息并转换为字符串
  std::string arch_info(TOSTRING(ARCHITECTURE));
  arch_info += std::string(" architecture. ");
  
  // 根据编译时定义的宏返回不同的处理器位数信息
#ifdef IS_32_BIT_ARCH
  return arch_info + std::string("Compiled on a 32 bit host processor.");
#elif IS_64_BIT_ARCH
  return arch_info + std::string("Compiled on a 64 bit host processor.");
#else
  return arch_info + std::string("Neither 32 nor 64 bit, puzzling ...");
#endif
}

// 主函数
int main() {
  // 输出架构信息
  std::cout << say_hello() << std::endl;
  // 返回成功状态
  return EXIT_SUCCESS;
}
